package com.projetosi.web.server.sistema.sistema;

import java.util.List;

import com.projetosi.web.server.sistema.interfaces.IGenericDAO;
import com.projetosi.web.server.sistema.interfaces.IGenericObject;
import com.projetosi.web.server.sistema.objetos.Usuario;

/**
 * 
 * @author Felipe Jose, Filipe Alencar, Rodrigo de Brito, Thiago Goncalves, Victor Hugo Arcelino;
 *
 */
public class GerenciadorDeDados {

	private IGenericDAO genericDAO;

	/**
	 * Atribui um novo objeto do tipo IGenericDAO para o atributo genericDAO.
	 * @param genericDAO
	 */
	public GerenciadorDeDados(IGenericDAO genericDAO){
		this.genericDAO = genericDAO;
	}
	/**
	 * Cadastra um objeto do tipo IGenericObject, armazenando-o em um repositorio de dados.
	 * @param objeto Objeto do tipo IGenericObject a ser cadastrado.
	 * @throws Exception 
	 */
	public void cadastrar(IGenericObject objeto) throws Exception  {
		genericDAO.cadastrar(objeto);
	}
	/**
	 *Altera um objeto do tipo IGenericObject, desde que esteja no repositorio de dados.
	 * @param objeto Objeto do tipo IGenericObject a ser alterado.
	 * @throws Exception 
	 */
	public void alterar(IGenericObject objeto) throws Exception  {
		genericDAO.alterar(objeto);
	}
	/**
	 *Deleta um objeto do tipo IGenericObject a partir de seu id, desde
	 * que esteja no repositorio de dados.
	 * @param objeto Objeto do tipo IGenericObject a ser deletado.
	 * @throws Exception 
	 */
	public void deletar(IGenericObject objeto) throws Exception {
		genericDAO.deletar(objeto);
	}
	/**
	 *Pesquisa por um objeto especifico do tipo IGenericObject,
	 * desde que esteja no repositorio de dados, a partir de um campo e chave
	 * especificos.
	 * @param objeto Objeto do tipo IGenericObject a ser pesuqisado.
	 * @throws Exception 
	 */
	public List<IGenericObject> pesquisar(String campo, String chave) throws Exception{
		return genericDAO.pesquisar(campo, chave);
	}
	/**
	 * Pesquisa por todos os objetos do tipo IGenericObject presentes no
	 * repositorio de dados.
	 * @return
	 * @throws Exception 
	 */
	public List<IGenericObject> pesquisarTodos() throws Exception {
		return genericDAO.pesquisarTodos();
	}

	/**
	 * Altera a forma como serao tratados os objetos e comportamentos.
	 * @param genericDAO Nova instancia para tratamento dos objetos.
	 */
	public void setTipoDeGerenciador(IGenericDAO genericDAO){
		this.genericDAO = genericDAO;
	}
	public List<IGenericObject> pesquisar(String atributo, String chave,
			Usuario usuario) {
		// TODO Auto-generated method stub
		return null;
	}


}
